package com.dalin.framework.common.clazz;

import java.util.ArrayList;
import java.util.List;

import com.dalin.framework.common.PropertyConst;
import com.dalin.framework.common.utils.StringUtils;

/*****************************************************************************
 * @content: 类中属性的定义，默认为私有                                                                                                *
 * @author : 那建林                                                                                                                                 *
 * @crtDate: 2009-10-03                                                     *
 * @modDate: 2010-05-11                                                     *
 * @version: 1.11                                                           *
 ****************************************************************************/
public class PropertyList {
	private final List<Property> propList = new ArrayList<Property>();
	
	/*************************************************************************
	 * @content: 添加属性
	 * @param  : type 参数类型
	 * @param  : name 参数名称
	 * @param  : note 属性注释
	 * @remark : 
	 * @return : PropertyList
	 * @author : 那建林
	 * @crtDate: 2010-05-11
	 * @chaDate: 2010-05-11
	 */
	public PropertyList add(String anno, String type, String name, String note) {
		propList.add(new Property(anno, type, name, note));
		return this;
	}
	public PropertyList add(String type, String name, String note) {
		propList.add(new Property(type, name, note));
		return this;
	}
	public PropertyList add(Property p) {
		propList.add(p);
		return this;
	}

	public List<Property> getAll() {
		return propList;
	}



	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer("");
		for (Property p : propList) {
			if (!StringUtils.isBlank(p.getAnnotation())) {
				sb.append(PropertyConst.TAB).append(p.getAnnotation()).append(PropertyConst.LINE_SEPARATOR);
			}
			sb.append(PropertyConst.TAB).append(PropertyConst.PRIVATE_STR)
			.append(PropertyConst.SPACE).append(p.getType())
			.append(PropertyConst.SPACE).append(p.getName())
			.append(PropertyConst.SEMICOLON)
			.append(PropertyConst.SPACE).append(PropertyConst.DOUBLE_SLASH)
			.append(PropertyConst.SPACE)
			.append(p.getNote() == null ? "" : p.getNote())
			.append(PropertyConst.LINE_SEPARATOR);
		}
		return sb.toString();
	}
}
